/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.ub.informatica.disseny.movieaff.modelo;

import java.util.ArrayList;

/**
 *
 * @author mat.aules
 */
public class Cliente {
    private String id;
    private String nom;
    private String dni;
    private String adreca;
    private String usuari;
    private String password;
    private String vip;
    private String faltes;
    private String nacionalidad;
    private Fecha nacimiento;
    private float precio;
    private boolean correctos;
    private int visualizacionesHoy;
    private int numVisualizaciones;
    private boolean visualizando;
    private String genero;
    private ArrayList <Valoracion> listValoraciones;
    private ArrayList <Pelicula> listPeliculas;

   public Cliente(String id, String nom, String dni, String adreca, String usuari, 
                  String password, String vip, String faltes, Fecha nacimiento, 
                  String nacionalidad,  float precio, boolean correctos, int visualizacionesHoy,
                  int numVisualizaciones, boolean visualizando, String genero) {
   
            this.id = id;
            this.nom = nom;
            this.dni = dni;
            this.adreca = adreca;
            this.usuari = usuari;
            this.password = password;
            this.vip = vip;
            this.faltes = faltes;
            this.nacimiento = nacimiento;
            this.nacionalidad = nacionalidad;
            this.precio = precio;
            this.correctos = correctos;
            this.visualizacionesHoy = visualizacionesHoy;
            this.numVisualizaciones = numVisualizaciones;
            this.visualizando = visualizando;
            this.genero = genero;
            listValoraciones = new ArrayList();
            listPeliculas = new ArrayList();
            
    }

    public Cliente(String id, String nom, String dni, String adreca, String usuari, String password, String vip, String faltes) {
      this(id, nom,  dni,  adreca, usuari,  password,  vip, faltes, null, null, 0, false, 0, 0, false, null);
    }
    
    

    /**
     * Retorna la id
     * @return the id
     */
    public String getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(String id) {
        this.id = id;
    }

    /**
     * @return the nom
     */
    public String getNom() {
        return nom;
    }

    /**
     * @param nom the nom to set
     */
    public void setNom(String nom) {
        this.nom = nom;
    }

    /**
     * @return the dni
     */
    public String getDni() {
        return dni;
    }

    /**
     * @param dni the dni to set
     */
    public void setDni(String dni) {
        this.dni = dni;
    }

    /**
     * @return the adreca
     */
    public String getAdreca() {
        return adreca;
    }

    /**
     * @param adreca the adreca to set
     */
    public void setAdreca(String adreca) {
        this.adreca = adreca;
    }

    /**
     * @return the usuari
     */
    public String getUsuari() {
        return usuari;
    }

    /**
     * @param usuari the usuari to set
     */
    public void setUsuari(String usuari) {
        this.usuari = usuari;
    }

    /**
     * @return the password
     */
    public String getPassword() {
        return password;
    }

    /**
     * @param password the password to set
     */
    public void setPassword(String password) {
        this.password = password;
    }

    /**
     * @return the vip
     */
    public String getVip() {
        return vip;
    }

    /**
     * @param vip the vip to set
     */
    public void setVip(String vip) {
        this.vip = vip;
    }

    /**
     * @return the faltes
     */
    public String getFaltes() {
        return faltes;
    }

    /**
     * @param faltes the faltes to set
     */
    public void setFaltes(String faltes) {
        this.faltes = faltes;
    }

    /**
     * @return the nacionalidad
     */
    public String getNacionalidad() {
        return nacionalidad;
    }

    /**
     * @param nacionalidad the nacionalidad to set
     */
    public void setNacionalidad(String nacionalidad) {
        this.nacionalidad = nacionalidad;
    }

    /**
     * @return the nacimiento
     */
    public Fecha getNacimiento() {
        return nacimiento;
    }

    /**
     * @param nacimiento the nacimiento to set
     */
    public void setNacimiento(Fecha nacimiento) {
        this.nacimiento = nacimiento;
    }

    /**
     * @return the precio
     */
    public float getPrecio() {
        return precio;
    }

    /**
     * @param precio the precio to set
     */
    public void setPrecio(float precio) {
        this.precio = precio;
    }

    /**
     * @return the correctos
     */
    public boolean isCorrectos() {
        return correctos;
    }

    /**
     * @param correctos the correctos to set
     */
    public void setCorrectos(boolean correctos) {
        this.correctos = correctos;
    }

    /**
     * @return the visualizacionesHoy
     */
    public int getVisualizacionesHoy() {
        return visualizacionesHoy;
    }

    /**
     * @param visualizacionesHoy the visualizacionesHoy to set
     */
    public void setVisualizacionesHoy(int visualizacionesHoy) {
        this.visualizacionesHoy = visualizacionesHoy;
    }
    
    /**
     * @return the numVisualizaciones
     */
    public int getNumVisualizaciones() {
        return numVisualizaciones;
    }

    /**
     * @param numVisualizaciones the numVisualizaciones to set
     */
    public void setNumVisualizaciones(int numVisualizaciones) {
        this.numVisualizaciones = numVisualizaciones;
    }

    /**
     * @return the visualizando
     */
    public boolean isVisualizando() {
        return visualizando;
    }

    /**
     * @param visualizando the visualizando to set
     */
    public void setVisualizando(boolean visualizando) {
        this.visualizando = visualizando;
    }
    
    /**
     * @return the genero
     */
    public String getGenero() {
        genero = seleccionarGenero();
        return genero;
    }

    /**
     * @param genero the genero to set
     */
    public void setGenero(String genero) {
        this.genero = seleccionarGenero();
    }
    
    public void addValoracion(Valoracion valoracion){
        listValoraciones.add(valoracion);
    }
    
    private String datosValoraciones(){
        for (int i = 0; i < listValoraciones.size(); i++){
            return listValoraciones.get(i).toString();
        }
        return null;
    }
    private String datosPeliculas(){
        for (int i = 0; i < listPeliculas.size(); i++){
            return listPeliculas.get(i).toString();
        }
        return null;
    }

    public int tamaño(){
        return listPeliculas.size();
    }

    public String sacarPelicua(int pos) {
        return listPeliculas.get(pos).getId();
    }
    
    public Pelicula obtenerPelicula(String titulo){
        for (int i = 0; i <tamaño(); i++){
            if (listPeliculas.get(i).getTitle().equals(titulo)){
                return listPeliculas.get(i);
            }
        }
        return null;
    }
    
    public String seleccionarGenero(){
        int genero1=0;
        int genero2=0;
        int genero3=0;
        int genero4=0;
        for (int i = 0; i <tamaño(); i++){
            if (listPeliculas.get(i).getGenero().getNom().equals("adventure")){
                genero1++;
            }
             if (listPeliculas.get(i).getGenero().getNom().equals("thriller")){
                genero2++;
            }
              if (listPeliculas.get(i).getGenero().getNom().equals("fantasy")){
                genero3++;
            }
               if (listPeliculas.get(i).getGenero().getNom().equals("action")){
                genero4++;
        }
    }
    if ((genero1>genero2) && (genero1>genero3) && (genero1>genero4)){
        return "adventure";
    }
    if ((genero2>genero1) && (genero2>genero3) && (genero2>genero4)){
        return "thriller";
    }
    if ((genero3>genero1) && (genero3>genero2) && (genero3>genero4)){
        return "fantasy";
    }
    if ((genero4>genero1) && (genero4>genero2) && (genero1>genero3)){
        return "action";
    }
    return null;
    }
    
    public boolean comprobarVisual() {
        boolean tmp2;
        if (this.isVisualizando()==true){
            tmp2 = true;
        }else{
            tmp2 = false;
            if (this.getVisualizacionesHoy()>= 2){
                String faltes = this.getFaltes();
                int faltas = Integer.parseInt(faltes);
                faltas++;
                faltes = String.valueOf(faltas);
                this.setFaltes(faltes);
                
            }
            int visualizaciones = this.getNumVisualizaciones();
            visualizaciones++;
            this.setNumVisualizaciones(visualizaciones);
            int visualizacionesToday = this.getVisualizacionesHoy();
            this.setVisualizacionesHoy(visualizacionesToday);
            this.setVisualizando(true);
        }
        return tmp2;
    }
    
    public void addPelicula(Pelicula pelicula){
        listPeliculas.add(pelicula);
    }

    @Override
    public String toString(){
        return ("\nClient ID: " +  getId()+ "\n------------" + "\nNom: " + getNom() + 
                "\nDNI: "+ getDni() + "\nAdreça: " + getAdreca()+ "\nUsuari: " + getUsuari() +
                "\nPassword: " + getPassword() + "\nVip: " + getVip() + "\nFaltes: " + getFaltes()+
                "\nFaltes: "+ getFaltes() + "\n Fecha nacimiento: "+ getNacimiento()+ 
                "\nNacionalidad: " + getNacionalidad() + "\nPrecio factura: "+ getPrecio()+
                "\nGenero: " + getGenero() + datosValoraciones() + datosPeliculas());




    }

    public void info() {
        System.out.println("Cliente: " + this.getUsuari());
        for (int i = 0; i < listPeliculas.size(); i++){
            listPeliculas.get(i).obtenerDatos();
        }
        float price = this.getNumVisualizaciones();
        System.out.println("Número de faltas:" + this.getFaltes());
        
        if (this.getVip().equals("true")){
            float factor = (float) 0.1;
            price = price-(price*factor);
            this.setPrecio(price);
            System.out.println("A pagar a final de mes:" + this.getPrecio()+ " euros");
        }else{
            this.setPrecio(this.getNumVisualizaciones());
            System.out.println("A pagar a final de mes:" + this.getPrecio()+ " euros");
            System.out.println();
        }
    }

    

    

    
    
}
